package pe.gob.osce.sirenas.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import pe.gob.osce.sirenas.dao.ProvinciaDAOLocal;
import pe.gob.osce.sirenas.dao.convert.ProvinciaConvert;
import pe.gob.osce.sirenas.model.AcreditacionDTO;
import pe.gob.osce.sirenas.model.ProvinciaDTO;
import pe.gob.osce.sirenas.model.jpa.Provincia;
import pe.gob.osce.sirenas.util.ConstanteEJB;
import pe.gob.osce.sirenas.util.ModeloException;



@Stateless
public class ProvinciaDAOImpl implements ProvinciaDAOLocal {

	@PersistenceContext(unitName="pe.gob.osce.sirenas.be.pu" )
	private	EntityManager	em;
	ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteEJB.PROPERTIES);

	@Override 
	public List<ProvinciaDTO>  ListarProvincia()
			throws Exception {

		List<ProvinciaDTO> listProvinciaDTO=null;
		List<Provincia> listaProvinciaJPA=null;
		try{
			StringBuilder  	jpql= new StringBuilder();
			jpql.append("SELECT pr FROM Provincia pr");
		
			Query	query= em.createQuery( jpql.toString() );
			List<Provincia>	listaObjeto= query.getResultList();
			if(!listaObjeto.isEmpty()) {
				listaProvinciaJPA=new ArrayList<Provincia>();
				for (Provincia obj: listaObjeto) {
					//fichaArbitralJPA=(FichaArbitral) obj[0];
					listaProvinciaJPA.add(obj);
				}
				listProvinciaDTO=ProvinciaConvert.createListDTO(listaProvinciaJPA);
			}
			
		} catch (NoResultException nre) {
			listProvinciaDTO=null;
			 throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_DATA));
		}catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB), e);
		}
		return listProvinciaDTO;
	}
	/******/
	

	@Override 
	public List<ProvinciaDTO>  ListarProvincia(Long idRegion)	throws Exception {

		List<ProvinciaDTO> listProvinciaDTO=null;
		List<Provincia> listaProvinciaJPA=null;
		try{
			StringBuilder  	jpql= new StringBuilder();
			jpql.append("SELECT pr FROM Provincia pr WHERE pr.idRegion= :idRegion");
		
			Query	query= em.createQuery( jpql.toString() );
			query.setParameter("idRegion", idRegion);
			List<Provincia>	listaObjeto= query.getResultList();
			if(!listaObjeto.isEmpty()) {
				listaProvinciaJPA=new ArrayList<Provincia>();
				for (Provincia obj: listaObjeto) {
					listaProvinciaJPA.add(obj);
				}
				listProvinciaDTO=ProvinciaConvert.createListDTO(listaProvinciaJPA);
			}
		} catch (NoResultException nre) {
			listProvinciaDTO=null;
			 throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_DATA));
		}catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB), e);
		}
		return listProvinciaDTO;
	}
}
